/**
 * JS 里的一些简单方法
 * @link bbs.blueidea.com
 * ibio 增加、完善
 * 2009-1-8 11:58
 */
package com.ibio8.javascript {
	import flash.external.ExternalInterface;
	import flash.system.Security;
	import flash.net.URLRequest;
	import flash.net.navigateToURL;
	/**
	 * JS 里的一些简单方法。
	 * 
	 * <p>
	 * 此类允许在 swf 里面调用 JS 里的一些简单方法。不过要使用此类还需注意：
	 * </p>
	 * <ul>
	 * <li>1 这些方法可能需要嵌入到页面中时才有效，否则可能会返回 null</li>
	 * <li>2 由于 JS 的跨域问题，需要设置 "allowScriptAccess", "always"</li>
	 * </ul>
	 * <b>此类最开始来自 bbs.blueidea.com，由 ibio 整理、完善。</b>
	 */
	public class JSFunction {
		/**
		 * 打开窗口
		 * @param	url		URL地址
		 * @param	window	打开模式
		 */
		public static function openWindow(url:String, window:String = "_blank"):void {
			setDomain("*");
			var urlRequest:URLRequest = new URLRequest(url);
			if (ExternalInterface.available) {
				try {
					var strUserAgent:String = String(ExternalInterface.call("function(){return navigator.userAgent;}")).toLowerCase();
					//如果是 IE 和 FF，则使用 JS 弹出窗口
					if (strUserAgent.indexOf("firefox") != -1 || 
					    (strUserAgent.indexOf("msie") != -1 && uint(strUserAgent.substr(strUserAgent.indexOf("msie") + 5, 3)) >= 7)) {
						ExternalInterface.call("window.open", urlRequest.url, window);
					}else {
						navigateToURL(urlRequest, window);
					}
				}catch (e:Error) {
					trace("JSFunction::openWindow->", e.message);
				}
			}else {
				try {
					navigateToURL(urlRequest, window);
				}catch (e:Error) {
					//trace("navigateToURL 失败，可能当前环境无法访问网络。");
				}
			}
		}
		
		/**
		 * 包含当前 swf 的页面所处的 url
		 */
		public static function get currentURL():String {
			var url:String;
			setDomain("*");
			if (ExternalInterface.available) {
				try {
					 url = ExternalInterface.call("function(){return location.href;}");
				}catch (e:Error) {
					trace("JSFunction::getCurrentURL->", e.message);
				}
			}
			return url;
		}
		
		/**
		 * 包含当前 swf 的页面的 refer
		 */
		public static function get refer():String {
			var refer:String;
			setDomain("*");
			if (ExternalInterface.available) {
				try {
					refer = ExternalInterface.call("function(){return document.referrer;}");
				}catch (e:Error) {
					trace("JSFunction::getRefer->", e.message);
				}
			}
			return refer;
		}
		
		/**
		 * 设置域
		 * @param	domain	当期的域
		 */
		public static function setDomain(domain:String):void {
			Security.allowDomain(domain);
			Security.allowInsecureDomain(domain);
		}
	}
}